package cn.le;

/*
    隔离级别是指若干个并发的事务之间隔离程度.与我们并发时候主要相关
    的场景包括;脏读,重复读,幻读

    @Transactional(isolation = Isolation.DEFAULT)
 */
public enum Isolation {
    //默认值,表示使用底层数据库的默认隔离级别,对大部分数据库而言,通常就是read_committed
    DEFAULT(-1),

    //该隔离级别表示一个事务可以读取另一个事务修改单还未提交的数据,该隔离不能防止
    //脏读和不可重读读,因此很少使用
    read_uncommitted(1),

    ,//该隔离级别表示一个事务只能读取林外一个事务已经提交的数据,该隔离级别可以防止脏读,也是大
    //多数情况下的推荐的值
    read_committed(2),

    //该隔离级别表示一个书屋在整个过程中可以多次重读执行某个查询,并且每次返回的记录都相同,
    //即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略,该级别可以防止脏读和不可重复读
    pepeatable_read(4),

    //所有事务此次逐个执行,这样事务之间完全不可能产生干扰,也就是说该级别可以防止脏读,不可重复读,
    //幻读,但是这将严重影响程度的性能,通常情况下也不会用到该级别
    serializable(8);

    private final int value;

    private Isolation(int value){
        this.value = value;
    }
    public int value(){
        return this.value;
    }
}
